﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Biblioteca.Interfaces;
using System.Data;

namespace Biblioteca.Models
{
    public class PrestamoModel : IPrestamo
    {
        private BibliotecaStore db;


        public PrestamoModel(BibliotecaStore data)
        {
            this.db = data;
        }

        public void crearPrestamos(Prestamo prestamo)
        {
            this.db.Prestamoes.AddObject(prestamo);
            db.SaveChanges();
        }

        public void modificarPrestamo(Prestamo prestamos)
        {
            db.ObjectStateManager.ChangeObjectState(prestamos, EntityState.Modified);
            db.SaveChanges();
        }

        public Prestamo getSigle(int id)
        {
           return  this.db.Prestamoes.Single(m => m.IdPrestamo == id);
        }

        public IList<Prestamo> getPrestamosActivosUsuario(int idUsuario)
        {
            return this.db.Prestamoes.Where(m => m.Usuario == idUsuario).Where(m => m.DevolucionEfectiva == null).OrderBy(m => m.FechaDevolucion).ToList();
        }


        public IList<Prestamo> getHistorialUsuario(int idUsuario)
        {
            return this.db.Prestamoes.Where(m => m.Usuario == idUsuario).ToList();
        }
        /**
        * Éste metodo es un parche, ya que se olvido de poner autoincrement para el id
        * */

        public int getMaxID()
        {
            try
            {
                return this.db.Prestamoes.Max(m => m.IdPrestamo) + 1;
            }
            catch
            {
                return 1;
            }
        }


        public IList<Prestamo> getActivos(int id)
        {
            return this.db.Prestamoes.Where(m => m.Material == id).Where(m => m.DevolucionEfectiva == null).OrderBy(m => m.FechaDevolucion).ToList();
        }

        public IList<Prestamo> getAntiguos(int id)
        {
            return this.db.Prestamoes.Where(m => m.Material == id).Where(m => m.DevolucionEfectiva != null).OrderBy(m => m.FechaDevolucion).ToList();
        }

        public IList<Prestamo> getVencimientos()
        {
            return this.db.Prestamoes.Where(m => m.DevolucionEfectiva == null).Where(m => m.FechaDevolucion < DateTime.Today).ToList();
        }


        public int cantPrestamosUsuario(int idUsuario)
        {
            return this.db.Prestamoes.Where(m => m.Usuario == idUsuario).Where(t => t.DevolucionEfectiva == null).Count();
        }
    }
}